<?php

namespace Pinenut;

class Request {
	const GET = 'GET';
	const POST = 'POST';
	public $action;
	protected $_params = array ();
	public $deferred;
	public $view; // пусто, для рядомлежащего шаблона...
	              // если используется какой-то другой шаблон - указываем его явно
	public $method;
	public $withLayout = false; // для внутренних запросов оболочка не используется
	protected $key;
	function __construct($action, array $params = array(), $view = null, $deferred = true) {
		$this->action = $action;
		$this->_params = $params;
		$this->deferred = $deferred;
		$this->view = $view;
		
		// TODO: сюда же нужно сессии наверное затянуть, а установку сессий в респонс
		
		$this->key = md5 ( $this->action . serialize ( $this->_params ) . serialize ( $this->view ) );
	}
	
	/**
	 * Магический геттер параметров
	 * 
	 * @param string $name        	
	 * @return multitype:
	 */
	function __get($name) {
		if (array_key_exists ( $name, $this->_params )) {
			return $this->_params [$name];
		}
	}
	
	/**
	 * Магический сеттер параметра
	 * 
	 * @param string $name        	
	 * @param multitype $value        	
	 * @return multitype:
	 */
	function __set($name, $value) {
		return $this->_params [$name] = $value;
	}
	/**
	 * Устанавливаем и получаем сразу все параметры запроса
	 * 
	 * @param array $params        	
	 * @return multitype:
	 */
	function params(array $params = null) {
		if (null !== $params) {
			$this->_params = $params;
		}
		return $this->_params;
	}
	function key() {
		return $this->key;
	}
	static function isPost() {
		// вот не знаю пока как метод подтягивать
		return $_SERVER ['REQUEST_METHOD'] == static::POST;
	}
	static function isAjax() {
		// from yii
		return isset ( $_SERVER ['HTTP_X_REQUESTED_WITH'] ) && $_SERVER ['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest';
	}
	
	/**
	 * Возвращаем данные сессии
	 * Как реализовывать - сложный вопрос
	 * Помимо этого надо не забыть про время блокировки в процессе работы с сессией,
	 * и как минимум стартовать её принудительно и на непродолжительный срок
	 *
	 * @param string $key        	
	 * @return unknown
	 */
	static function getSession($key = null) {
		if (null !== $key) {
			if (isset ( $_SESSION [$key] )) {
				return $_SESSION [$key];
			}
		} else {
			return $_SESSION;
		}
	}
	static function getSessionId() {
		return session_id ();
	}
}